package com.citywithincity.lock;


/**
 * 同步锁
 * @author randy
 *
 */
public class SyncLockFactory {
	
	private Object[] objects;
	
	/**
	 * 初始化锁的数量
	 * @param count
	 */
	public SyncLockFactory(int count){
		objects = new Object[count];
		for(int i=0; i < count; ++i){
			objects[i] = new Object();
		}
	}
	
	public Object getLock(String key,Object name){
		return getLock(new StringBuilder(key).append(name).toString());
	}
	
	/**
	 * 对于相同名称,一定可以获取同一把锁,
	 * 不同的名称,获取的可能是不同的锁,
	 * 
	 * 
	 * 起到控制锁粒度的效果
	 * @param name
	 * @return
	 */
	public Object getLock(String name){
		int lock = Math.abs(name.hashCode() % objects.length);
		return objects[lock];
	}
}
